/*
 *  Autores: Claudio Djohnnatha, David Guilherme, Jailson Lima e Jordan Lira.
 *
 *  Projeto da disciplina Linguagem de Programação 2.
 *
 *  Arquivo: ListDocuments.java
 *
 *  Data: 27/08/2013
 *
 */



import java.util.LinkedList;
import java.util.Collections;
import java.io.Serializable;

public class ListDocuments implements Serializable
{
   // Lista com o nome dos Documentos salvos no Servidor.
   private LinkedList< String > list_names;

   public ListDocuments()
   {
      list_names = new LinkedList< String >();
   }

   public String getListNames()
   {
      // A lista com os nomes dos documentos está vazia.
      if ( list_names.size() == 0 )
         return "EMPTY";

      // String[] names = new String[ list_names.size() ];
      String[] ranges = new String[ list_names.size() + 2 ];

      int count = 0;
      ranges[ 0 ] = " " + count;
      ranges[ ranges.length - 1 ] = " " + ( list_names.size() + 1 );

      // Coloca os intervalos do nomes dos documentos em um array.
      for ( int i = 1; i < ranges.length - 1; i++ )
      {
         count += list_names.get( i - 1 ).length();
         ranges[ i ] = " " + count;
      }

      String namesAndRanges = "";
      for ( int i = 0; i < list_names.size(); i++ )
         namesAndRanges += list_names.get( i );
      for ( int i = 0; i < ranges.length; i++ )
         namesAndRanges += ranges[ i ];

      return namesAndRanges;
   }

   public void add( String document_name )
   {
      // Adicionando novo documento a LinkedList.
      list_names.add( document_name );
      
      // Classifica a lista em ordem alfabética.
      Collections.sort( list_names, new DocumentComparator() );
   }

   public void remove( String document_name )
   {
      for ( int count = 0; count < list_names.size(); count++ )
         if ( list_names.get( count ).equals( document_name ) )
            list_names.remove( count );
   }

   // Retorna true se o document_name passado como parâmentro já existir na lista, se não existir
   // retorna false.
   public boolean exists( String document_name )
   {
      for ( int count = 0; count < list_names.size(); count++ )
         if ( list_names.get( count ).equals( document_name ) )
            return true;

      return false;
   }
}